<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Modelos : Gu&iacute;a del Usuario de CodeIgniter</title>

<style type='text/css' media='all'>@import url('../userguide.css');</style>
<link rel='stylesheet' type='text/css' media='all' href='../userguide.css' />

<script type="text/javascript" src="../nav/nav.js"></script>
<script type="text/javascript" src="../nav/prototype.lite.js"></script>
<script type="text/javascript" src="../nav/moo.fx.js"></script>
<script type="text/javascript" src="../nav/user_guide_menu.js"></script>

<meta http-equiv='expires' content='-1' />
<meta http-equiv= 'pragma' content='no-cache' />
<meta name='robots' content='all' />
<meta name='author' content='ExpressionEngine Dev Team' />
<meta name='description' content='Gu&iacute;a del Usuario de CodeIgniter' />
</head>
<body>

<!-- START NAVIGATION -->
<div id="nav"><div id="nav_inner"><script type="text/javascript">create_menu('../');</script></div></div>
<div id="nav2"><a name="top"></a><a href="javascript:void(0);" onclick="myHeight.toggle();"><img src="../images/nav_toggle_darker.jpg" width="154" height="43" border="0" title="Mostrar Tabla de Contenido" alt="Mostrar Tabla de Contenido" /></a></div>
<div id="masthead">
<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
<tr>
<td><h1>Gu&iacute;a del Usuario de CodeIgniter Versi&oacute;n 2.1.1</h1></td>
<td id="breadcrumb_right"><a href="../toc.html">Tabla de Contenido</a></td>
</tr>
</table>
</div>
<!-- END NAVIGATION -->


<!-- START BREADCRUMB -->
<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
<tr>
<td id="breadcrumb">
<a href="http://codeigniter.com/">CodeIgniter</a> &nbsp;&#8250;&nbsp;
<a href="../index.html">Gu&iacute;a del Usuario</a> &nbsp;&#8250;&nbsp;
Modelos
</td>
<td id="searchbox"><form method="get" action="http://www.google.com/search"><input type="hidden" name="as_sitesearch" id="as_sitesearch" value="escodeigniter.com/guia_usuario/" />Buscar en la Gu&iacute;a del Usuario&nbsp; <input type="text" class="input" style="width:200px;" name="q" id="q" size="31" maxlength="255" value="" />&nbsp;<input type="submit" class="submit" name="sa" value="Go" /></form></td>
</tr>
</table>
<!-- END BREADCRUMB -->

<br clear="all" />


<!-- START CONTENT -->
<div id="content">

<h1>Modelos</h1>
<p>Los modelos est&aacute;n disponibles <strong>opcionalmente</strong> para los que deseen utilizar un enfoque m&aacute;s tradicional MVC.</p>

<ul>
<li><a href="#what">Qu&eacute; es un modelo?</a></li>
<li><a href="#anatomy">Anatom&iacute;a de un modelo</a></li>
<li><a href="#loading">Cargando un modelo</a></li>
<li><a href="#auto_load_model">Cargar un Modelo Autom&aacute;ticamente</a> </li>
<li><a href="#conn">Conexi&oacute;n a su base de datos</a></li>
</ul>

<a name="what"><h2></a>Qu&eacute; es un modelo?</h2>
<p>Los modelos son clases PHP que se han dise&ntilde;ado para trabajar con la informaci&oacute;n en su base de datos. Por ejemplo, digamos que usted usa CodeIgniter para administrar un blog. Puede que tenga una clase de modelo que contiene funciones para insertar, actualizar y recuperar datos de su blog. Aqu&iacute; est&aacute; un ejemplo de lo que podr&iacute;a ser la clase del modelo:</p>

<pre>
class Blogmodel extends CI_Model{

	var $title   = '';
	var $content = '';
	var $date    = '';

	function __construct()
	{
		// Llamando al contructor del Modelo
		parent::__construct();
	}
	
	function get_last_ten_entries()
	{
		$query = $this->db->get('entries', 10);
		return $query->result();
	}

	function insert_entry()
	{
		$this->title   = $_POST['title']; // por favor leer la nota de abajo
		$this->content = $_POST['content'];
		$this->date    = time();
		
		$this->db->insert('entries', $this);
	}

	function update_entry()
	{
		$this->title   = $_POST['title'];
		$this->content = $_POST['content'];
		$this->date    = time();

		$this->db->update('entries', $this, array('id', $_POST['id']));
	}

}
</pre>

<p>Nota: Las funciones en el ejemplo anterior usan funciones de base de datos <a href="../database/active_record.html">Active Record</a>.</p>
<p class="important"><strong>Nota:</strong> En aras de la simplicidad, en este ejemplo usamos $_POST directamente. Esto es generalmente una mala pr&aacute;ctica, y el enfoque m&aacute;s com&uacute;n ser&iacute;a usar la <a href="../libraries/input.html">Clase Input</a> $this->input->post('title')</p>

<h2><a name="anatomy"></a>Anatomia de un Modelo</h2>
<p>La clases de Modelo estan almacenadas en su carpeta <dfn>application/models/</dfn>. Se puede anidar dentro de sub-carpetas si desea esta organizaci&oacute;n.</p>
<p>El prototipo b&aacute;sico para una clase de Modelo es esta:</p>
<code>
class&nbsp;<var>Model_name</var>&nbsp;extends&nbsp;CI_Model&nbsp;{<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;function&nbsp;<var>__construct</var>()<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;parent::__construct();<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}</code>
<p>Donde <var>Model_name</var> es el nombre de su clase. Los nombre de clase <strong>TIENEN QUE TENER</strong> la primera letra en may&uacute;scula con el resto del nombre en min&uacute;scula. Aseg&uacute;rese de que su clase extiende el modelo de base de la clase.</p>
<p>El nombre del archivo ser&aacute; la versi&oacute;n en min&uacute;scula de su nombre de clase.  Por ejemplo, si su clase es esta:</p>
<code>
class&nbsp;<var>User_model</var>&nbsp;extends&nbsp;CI_Model&nbsp;{<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;function&nbsp;<var>__construct</var>()<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;parent::__construct();<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}</code>
<p>su archivo ser&aacute; este:</p>
<code>application/models/<var>user_model.php</var></code>
<h2><a name="loading"></a>Cargando un Modelo</h2>
<p>Sus modelos suelen ser cargados y llamados desde sus funciones de <a href="controllers.html">controlador</a>.
Para carga un modelo debe usar la siguiente funci&oacute;n:</p>
<code>$this->load->model('<var>Model_name</var>');</code>
<p>Si su modelo esta localizado en una sub-carpeta, incluya la ruta relativa de su carpeta de modelos. Por ejemplo, si tiene un modelo localizado en <dfn>application/models/blog/queries.php</dfn> cargar&aacute; usando esto:</p>
<code>$this->load->model('blog/queries');</code>
<p>Una vez cargado, tendr&aacute; que acceder a su funciones de modelo utilizando un objeto con el mismo nombre que su clase:</p>
<code>
$this->load->model('<var>Model_name</var>');<br />
<br />
$this-><var>Model_name</var>->function();
</code>
<p>Si desea que su modelo este asignado a un nombre de objeto diferente, ud. lo puede especificar por medio del segundo par&aacute;metro de la funci&oacute;n de carga:</p>
<code>
$this->load->model('<var>Model_name</var>', '<kbd>fubar</kbd>');<br />
<br />
$this-><kbd>fubar</kbd>->function();
</code>
<p>Aqu&iacute; hay un ejemplo de un controlador que carga un modelo y luego sirve a una vista:</p>
<code>
class&nbsp;Blog_controller&nbsp;extends&nbsp;CI_Controller&nbsp;{<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;function&nbsp;blog()<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$this->load->model('Blog');<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$data['query'] = $this->Blog->get_last_ten_entries();<br /><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$this->load->view('blog', $data);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}</code>
<h2><a name="auto_load_model" id="auto_load_model"></a>Cargar un Modelo Autom&aacute;ticamente</h2>
<p>Si encuentra que necesita tener un modelo disponible globalmente a lo largo de su aplicaci&oacute;n, puede decirle a CodeIgniter que lo cargue autom&aacute;ticamente durante la inicializaci&oacute;n del sistema. Esto se hace al abrir el archivo application/config/autoload.php y agregando el modelo al array $autoload.</p>
<h2><a name="conn"></a>Conexi&oacute;n a su base de datos</h2>
<p>Cuando se carga un modelo, &eacute;ste <strong>NO</strong> se conecta autom&aacute;ticamente a su base de datos. Las siguientes opciones de conexi&oacute;n est&aacute;n habilitadas para ud:</p>
<ul>
<li>Puede conectarse usando los m&eacute;todos de base de datos standard <a href="../database/connecting.html">descriptos aqu&iacute;</a>, ya sea dentro de su clase Controlador o su clase Modelo.</li>
<li>Puede decirle a la funci&oacute;n de autocarga del modelo para auto-conectarse pas&aacute;ndole <kbd>TRUE</kbd> (boolean) a trav&eacute;s del tercer par&aacute;metro, y la configuraci&oacute;n de conectividad, tal como se define en su archivo de configuraci&oacute;n de la base de datos a ser utilizado:
	<code>$this->load->model('<var>Model_name</var>', '', <kbd>TRUE</kbd>);</code>	
	</li>
<li>Puede pasar manualmente la configuraci&oacute;n de la conectividad de base de datos a trav&eacute;s del tercer par&aacute;metro:
		<code>$config['hostname'] = "localhost";<br />
		$config['username'] = "myusername";<br />
		$config['password'] = "mypassword";<br />
		$config['database'] = "mydatabase";<br />
		$config['dbdriver'] = "mysql";<br />
		$config['dbprefix'] = "";<br />
		$config['pconnect'] = FALSE;<br />
		$config['db_debug'] = TRUE;<br />
		<br />
		$this->load->model('<var>Model_name</var>', '', <kbd>$config</kbd>);</code></li>
</ul>
</div>
<!-- END CONTENT -->


<div id="footer">
<p>
Tema anterior:&nbsp;&nbsp;<a href="views.html">Vistas</a>
&nbsp;&nbsp;&nbsp;&middot;&nbsp;&nbsp;
<a href="#top">Subir</a>&nbsp;&nbsp;&nbsp;&middot;&nbsp;&nbsp;
<a href="../index.html">Gu&iacute;a del Usuario</a>&nbsp;&nbsp;&nbsp;&middot;&nbsp;&nbsp;
Pr&oacute;ximo tema:&nbsp;&nbsp;<a href="helpers.html">Helpers</a>
</p>
<p><a href="http://codeigniter.com">CodeIgniter</a> &nbsp;&middot;&nbsp; Copyright &#169; 2006 - 2011 &nbsp;&middot;&nbsp; <a href="http://ellislab.com/">EllisLab, Inc.</a></p>
</div>

</body>
</html>